perl

推荐列表 站点导航

当前位置:首页 > 脚本编程 > perl >

perl rrdtool绘制网络流量图

来源:网络整理  作者:  发布时间:2020-12-26 17:04
一直很想了解nagios中的pnp是如何工作的,正好看到这几天cu上有人问rrdtool如何图像。这几天特地的翻了翻rrd的资料,...

一直很想了解nagios中的pnp是如何工作的,正好看到这几天cu上有人问rrdtool如何图像。这几天特地的翻了翻rrd的资料,补习了下。结合perl的一些模块,获取所需要的数据,最后调用rrdtools绘制图像。好了,废话不多说了,开始讲解实现过程。

一、 所需软件以及安装方法

    1.安装rrdtool (这里不多说了,网上文章太多了),安装默认路径/usr/local/rrdtool/
    2.安装perl所需要的模块:
RRD::Simple ---------用于调用rrdtool绘制图像
Sys::Statistics::Linux ---------用于获取系统的一些动态数据(例如,网卡流量,CPU,磁盘IO)存储在yml文件中
YAML----------用于解析yml中的数据
#cpan  
cpan>install  RRD::Simple  Sys::Statistics::Linux YAML

二、rrdtool的简要原理

  可能直接贴代码,很多人不理解原理。这里我就讲下rrdtool绘制图像的简要原理。

perl rrdtool绘制网络流量图


 

三、代码

#!/usr/bin/perl use strict; use warnings; use RRD::Simple qw(:all); use YAML; use Sys::Statistics::Linux; my $rrdfile = '/home/mcshell/tmp/myfile.rrd'; my $rrdfile_tmp = '/home/mcshell/tmp/myfile_tmp.rrd'; my $rrd = RRD::Simple->new( file => "$rrdfile" ); my $rrd_tmp = RRD::Simple->new( file => "$rrdfile_tmp"); #建立一个临时rrd用于计算5分钟内变化的差值 unless(-e $rrdfile){ $rrd->create( #如果没有rrd则进行建立一个rrd bytesIn => "GAUGE", #定义数值源类型 bytesOut => "GAUGE", ); $rrd_tmp->create( bytesIn => "GAUGE", bytesOut => "GAUGE", ); } my ($now_input,$now_output,$input,$output); my $lxs = Sys::Statistics::Linux->new( #这里进行获取网卡的流量(这个模块可以获取多个系统参数,如cpu,process,磁盘IO) #可以根据这些可以绘制这种图形。 netstats => { init => 1, initfile => '/tmp/netstats.yml', #数据存入yml文件 }, ); my $stat = $lxs->get; my $config = YAML::LoadFile('/tmp/netstats.yml');#解析yml文件 $now_input = $config->{eth0}->{rxbyt}; $now_output = $config->{eth0}->{txbyt}; my $info = $rrd->info("$rrdfile_tmp"); #获取tmp的数据 my $before_input_5=$info->{ds}->{bytesIn}->{last_ds}; #获取5分钟之前的数据 my $before_output_5=$info->{ds}->{bytesOut}->{last_ds}; if ($before_input_5 eq 'U' || $before_output_5 eq 'U'){ $before_input_5 = $now_input; $before_output_5 = $now_output; } $input = $now_input - $before_input_5; #5分钟变化的数据 $output = $now_output - $before_output_5; $rrd->update( bytesIn => "$input", bytesOut => "$output", ); $rrd_tmp->update( bytesIn => "$now_input", bytesOut => "$now_output", ); my $starttime = time; #获取当前unix时间戳 my $endtime = $starttime - 7200; #2个小时之前的unix时间戳 my %rtn = $rrd->graph( #这里是定义每周,每月,每年的图形。 timestamp => "both", periods => [ qw{ weekly monthly annual} ], #定义所需的周期文件 title => "Network Interface eth0", vertical_label => "Bytes/sec", line_thickness => 2, #画线的像素 extended_legend => 1, #打开详细信息 ); %rtn = $rrd->graph( #这里是定义一个2小时的图形,去掉下面的end,start为一天的图 destination => "/var/www/html", timestamp => "both", periods => [ qw{ daily } ], title => "Network Interface eth0", vertical_label => "Bytes/sec", line_thickness => 2, extended_legend => 2, end => $starttime, start =>$endtime, "COMMENT: " => "", #此处的COMMENT是有空格的,尼玛真是一个一个空格来对齐下面的格式,靠O__O"… "GPRINT:bytesOut:AVERAGE: bytesOut平均值%8.2lf%s"=> "", "COMMENT: " => "", "GPRINT:bytesIn:AVERAGE: bytesIn平均值%8.2lf%s"=> "", ); my $lastUpdated = $rrd->last; print "myfile.rrd was last updated at " . scalar(localtime($lastUpdated)) . "\n";


 

在crontab中加入每五分钟运行一次。

四、验证图像

perl rrdtool绘制网络流量图


 

五、总结

如果想定制自己的个性化颜色以及多个数据点,可以先学习下rrdtool的使用方法,只要理解了rrdtool的工作原理,
以及数据源的处理,可以更好的理解cacti,nagios是如何绘制图像的。
有什么问题,以及建议欢迎留言

 

相关热词:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/jiaob/perl/9443.shtml

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

perl rrdtool绘制网络流量图

2020-12-26 编辑:

一直很想了解nagios中的pnp是如何工作的,正好看到这几天cu上有人问rrdtool如何图像。这几天特地的翻了翻rrd的资料,补习了下。结合perl的一些模块,获取所需要的数据,最后调用rrdtools绘制图像。好了,废话不多说了,开始讲解实现过程。

一、 所需软件以及安装方法

    1.安装rrdtool (这里不多说了,网上文章太多了),安装默认路径/usr/local/rrdtool/
    2.安装perl所需要的模块:
RRD::Simple ---------用于调用rrdtool绘制图像
Sys::Statistics::Linux ---------用于获取系统的一些动态数据(例如,网卡流量,CPU,磁盘IO)存储在yml文件中
YAML----------用于解析yml中的数据
#cpan  
cpan>install  RRD::Simple  Sys::Statistics::Linux YAML

二、rrdtool的简要原理

  可能直接贴代码,很多人不理解原理。这里我就讲下rrdtool绘制图像的简要原理。

perl rrdtool绘制网络流量图


 

三、代码

#!/usr/bin/perl use strict; use warnings; use RRD::Simple qw(:all); use YAML; use Sys::Statistics::Linux; my $rrdfile = '/home/mcshell/tmp/myfile.rrd'; my $rrdfile_tmp = '/home/mcshell/tmp/myfile_tmp.rrd'; my $rrd = RRD::Simple->new( file => "$rrdfile" ); my $rrd_tmp = RRD::Simple->new( file => "$rrdfile_tmp"); #建立一个临时rrd用于计算5分钟内变化的差值 unless(-e $rrdfile){ $rrd->create( #如果没有rrd则进行建立一个rrd bytesIn => "GAUGE", #定义数值源类型 bytesOut => "GAUGE", ); $rrd_tmp->create( bytesIn => "GAUGE", bytesOut => "GAUGE", ); } my ($now_input,$now_output,$input,$output); my $lxs = Sys::Statistics::Linux->new( #这里进行获取网卡的流量(这个模块可以获取多个系统参数,如cpu,process,磁盘IO) #可以根据这些可以绘制这种图形。 netstats => { init => 1, initfile => '/tmp/netstats.yml', #数据存入yml文件 }, ); my $stat = $lxs->get; my $config = YAML::LoadFile('/tmp/netstats.yml');#解析yml文件 $now_input = $config->{eth0}->{rxbyt}; $now_output = $config->{eth0}->{txbyt}; my $info = $rrd->info("$rrdfile_tmp"); #获取tmp的数据 my $before_input_5=$info->{ds}->{bytesIn}->{last_ds}; #获取5分钟之前的数据 my $before_output_5=$info->{ds}->{bytesOut}->{last_ds}; if ($before_input_5 eq 'U' || $before_output_5 eq 'U'){ $before_input_5 = $now_input; $before_output_5 = $now_output; } $input = $now_input - $before_input_5; #5分钟变化的数据 $output = $now_output - $before_output_5; $rrd->update( bytesIn => "$input", bytesOut => "$output", ); $rrd_tmp->update( bytesIn => "$now_input", bytesOut => "$now_output", ); my $starttime = time; #获取当前unix时间戳 my $endtime = $starttime - 7200; #2个小时之前的unix时间戳 my %rtn = $rrd->graph( #这里是定义每周,每月,每年的图形。 timestamp => "both", periods => [ qw{ weekly monthly annual} ], #定义所需的周期文件 title => "Network Interface eth0", vertical_label => "Bytes/sec", line_thickness => 2, #画线的像素 extended_legend => 1, #打开详细信息 ); %rtn = $rrd->graph( #这里是定义一个2小时的图形,去掉下面的end,start为一天的图 destination => "/var/www/html", timestamp => "both", periods => [ qw{ daily } ], title => "Network Interface eth0", vertical_label => "Bytes/sec", line_thickness => 2, extended_legend => 2, end => $starttime, start =>$endtime, "COMMENT: " => "", #此处的COMMENT是有空格的,尼玛真是一个一个空格来对齐下面的格式,靠O__O"… "GPRINT:bytesOut:AVERAGE: bytesOut平均值%8.2lf%s"=> "", "COMMENT: " => "", "GPRINT:bytesIn:AVERAGE: bytesIn平均值%8.2lf%s"=> "", ); my $lastUpdated = $rrd->last; print "myfile.rrd was last updated at " . scalar(localtime($lastUpdated)) . "\n";


 

在crontab中加入每五分钟运行一次。

四、验证图像

perl rrdtool绘制网络流量图


 

五、总结

如果想定制自己的个性化颜色以及多个数据点,可以先学习下rrdtool的使用方法,只要理解了rrdtool的工作原理,
以及数据源的处理,可以更好的理解cacti,nagios是如何绘制图像的。
有什么问题,以及建议欢迎留言

 

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/jiaob/perl/9443.shtml

相关文章

风云图片

推荐阅读

返回perl频道首页